import {
	BASE_URL,
} from '@/utils/request.js';

import {
	$get,
} from "@/utils/request.js"
// 直接导入创建好的 store 实例（请根据你的实际路径调整）
import store from '@/store/index.js'


// 方法集合
const methods = {}
let loginIndexLong = 5
let loginIndexNow = 0


const login = () => {
	return new Promise((resolve, reject) => {
		uni.showLoading({
			title: '登录中'
		})
		// 直接使用导入的 store 实例
		uni.login({
			provider: 'weixin',
			success: (loginRes) => {
				let params = {
					clientId: '450620e00fa10e1d939048eb20475bab',
					grantType: 'xcx',
					xcxCode: loginRes.code
				}
				uni.request({
					url: BASE_URL + '/auth/login',
					method: 'POST',
					data: params,
					success: (res) => {
						if (res.data.code === 200) {
							uni.setStorageSync('token', res.data.data.access_token);
							queryInfo()
							uni.hideLoading()
							resolve(1)
						} else {
							loginIndexNow++
							if (loginIndexNow < loginIndexLong) {
								login().then(res => {
									resolve(1)
								})
							} else {
								uni.showToast({
									title: '稍后再试~',
									icon: 'none'
								});
								loginIndexNow = 0
								reject(res)
							}
						}
					},
					fail: (err) => {
						login().then(res => {
							resolve(1)
						})
					}
				})
			},
			fail: (err) => {
				console.log(err)
			}
		})
	})
}

//登录接口
const queryInfo = () => {
	$get('/system/user/getInfo').then(res => {
		if (res.code == 200) {
			store.commit('setUserInfo', res.data.user);
			store.commit('setRoles', res.data.roles);
		}

	})
}



//此方法是token没有过期，第二次打开小程序，把用户信息从本地获取存入vuex
const againSet = () => {
	const userinfo = uni.getStorageSync('StorageSyncUserInfo');
	store.commit('setUserInfo', userinfo);
}

// 新增：订阅消息相关方法（独立封装）
const subscribeMessage = {
	// 检查是否是首次进入小程序
	isFirstEnter() {
		// 用本地存储标记是否已处理过首次订阅
		return !uni.getStorageSync('hasHandledFirstSubscribe');
	},

	// 标记为已处理首次订阅（避免重复询问）
	markAsHandled() {
		uni.setStorageSync('hasHandledFirstSubscribe', 'true');
	},

	// 实际调用订阅消息的方法
	requestSubscribe() {
		const tmplIds = [
			'0tL9KP3wKuWMsRUEtOTJoklhjrUW9zOkAfuGQgXuDvM', // 对应“签到提醒”的模板ID
		];

		uni.requestSubscribeMessage({
			tmplIds: tmplIds,
			success: (res) => {
				console.log('用户订阅结果：', res);
				// 可根据每个模板的订阅结果做后续处理
				// 例如，判断“签到提醒”是否被允许
				// if (res[tmplIds[0]] === 'accept') { 
				//   console.log('用户同意签到提醒订阅') 
				// }
			},
			fail: (err) => {
				console.error('订阅请求失败：', err);
			}
		});
	},
	// 核心入口：检查并执行首次订阅
	checkAndSubscribe() {
		this.requestSubscribe()
		// 如果是首次进入，才询问订阅
		if (this.isFirstEnter()) {
			this.requestSubscribe(); // 调用订阅
			this.markAsHandled(); // 标记为已处理，避免下次再弹
		}
	}
};





methods.login = login
methods.againSet = againSet
methods.subscribeMessage = subscribeMessage;
methods.queryInfo = queryInfo;


export default methods